home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu374.dms / pu374.adf / Plasma / Fastpix.asm next >
Assembly Source File  |  1992-12-06  |  2KB  |  105 lines

  1.     CSECT   text
  2. ;/*************************************************
  3. ;/*
  4. ;/* This code © 1989 by W. Roger uzun
  5. ;/* This code is for Lattice ASM
  6. ;/* Use these Prototypes ONLY!!
  7. ;/* int __regargs ReadPix(long,long);
  8. ;/* void __regargs FastPix(long,long,long);
  9. ;/*
  10. ;/*************************************************/
  11.  
  12. ;use SC BLINK option to merge this guy with our default c code hunk
  13.     XDEF    @ReadPix
  14.     XDEF    @FastPix
  15.  
  16. @FastPix
  17. ; D0 has x pos
  18. ; D1 has Y pos
  19. ; 4(sp) has color
  20.     Movem.l    d2-d3/a2,-(sp)
  21.     lea    _ytable(a4),a0 ; ytable array base addr
  22.     asl.l    #1,d1 ; array offset for shorts
  23.     move.w    0(a0,d1.l),a2 ; byteoffset = ytable[y]
  24.     move.l    d0,d2 ; get x in d2
  25.     asr.l    #3,d2 ; div 8 for col byte
  26.     adda.l    d2,a2 ; add to byteoffset
  27.     
  28.     and.l    #7,d0 ; x = x % 8
  29.     move.l    #7,d2
  30.     sub.w    d0,d2
  31.     ext.l    d2
  32.     moveq.l    #0,d3
  33.     move.w    _nplanes(a4),d3
  34.     moveq.l    #0,d0
  35. pixloop    move.w    d3,d0
  36.     asl.l    #2,d0
  37.     lea    _bp(a4),a0
  38.     move.l    a2,d1
  39.     move.l    0(a0,d0.l),a1
  40.     add.l    d1,a1
  41.  
  42. checkcolor
  43.     move.l    16(sp),d0 ; load color
  44.     btst    d3,d0
  45.     bne    setpixel
  46.  
  47. clearpixel
  48.     bclr    d2,(a1)
  49.     dbra    d3,pixloop
  50.     movem.l    (sp)+,d2-d3/a2
  51.     rts
  52.  
  53. setpixel
  54.     bset    d2,(a1)
  55.     dbra    d3,pixloop
  56.     movem.l    (sp)+,d2-d3/a2
  57.     rts
  58.  
  59.  
  60. @ReadPix
  61. ; D0 has x pos
  62. ; D1 has Y pos
  63.     Movem.l    d2-d4/a2,-(sp)
  64.     lea    _ytable(a4),a0 ; ytable array base addr
  65.     asl.l    #1,d1 ; array offset for shorts
  66.     move.w    0(a0,d1.l),a2 ; byteoffset = ytable[y]
  67.     move.l    d0,d2 ; get x in d2
  68.     asr.l    #3,d2 ; div 8 for col byte
  69.     adda.l    d2,a2 ; add to byteoffset
  70.     
  71.     and.l    #7,d0 ; x = x % 8
  72.     move.l    #7,d2
  73.     sub.w    d0,d2
  74.     ext.l    d2
  75.     moveq.l    #0,d3
  76.     move.w    _nplanes(a4),d3
  77.     moveq.l    #0,d0
  78.     moveq.l    #0,d4
  79. pixloo    move.w    d3,d4
  80.     asl.l    #2,d4
  81.     lea    _bp(a4),a0
  82.     move.l    a2,d1
  83.     move.l    0(a0,d4.l),a1
  84.     add.l    d1,a1
  85.  
  86.     btst.b    d2,(a1)
  87.     bne    setpixel2
  88.  
  89.     dbra    d3,pixloo
  90.     movem.l    (sp)+,d2-d4/a2
  91.     rts
  92.  
  93. setpixel2
  94.     bset.l    d3,d0
  95.     dbra    d3,pixloo
  96.     movem.l    (sp)+,d2-d4/a2
  97.     rts
  98.  
  99.  
  100.     CSECT    __MERGED,data ; naming this hunk __MERGED means a4 relative
  101.     XREF    _bp
  102.     XREF    _nplanes
  103.     XREF    _ytable
  104.     end
  105.